package com.youlai.jdk;

import org.junit.jupiter.api.Test;

/**
 * 2020年3月17日发布
 * Java14新增特性
 * Switch 表达式（JEP 361）的增强：允许在 switch 语句中使用 yield 关键字，以返回一个值。
 * Records（JEP 359）：Records 是一种新的类声明形式，它可以通过简单的声明来定义不可变的数据类。
 * Pattern Matching for instanceof（JEP 305）的增强：可以使用 instanceof，以便更好地处理复杂的数据结构。
 * @author zc
 * @date 2023-03-25 21:19
 */
public class Java14 {

    /**
     * Switch 表达式
     */
    @Test
    public void switchExpression() {
        int num = 2;
        String result = switch (num) {
            case 1 -> "One";
            case 2 -> {
                yield "Two";
            }
            case 3 -> "Three";
            default -> "Other";
        };
        System.out.println(result); // 输出"Two"
    }

    /**
     * instanceof 模式匹配
     */
    @Test
    public void instanceofPatternMatching() {
        Object obj = "Hello";
        if (obj instanceof String s && s.length() > 0) {
            System.out.println(s);
        } else {
            System.out.println("Not a non-empty String.");
        }
    }

    /**
     * Records 是一种新的类声明形式，用于定义不可变的数据类
     */
    @Test
    public void records() {
        // 传统的定义数据类
        class Person {
            private String name;
            private int age;

            public Person(String name, int age) {
                this.name = name;
                this.age = age;
            }

            public String getName() {
                return name;
            }

            public int getAge() {
                return age;
            }
        }
        Person p = new Person("Bob", 20);
        System.out.println(p.getName());
        System.out.println(p.getAge());
        // 使用 Records
        record Person2(String name, int age) {
        }
        Person2 p2 = new Person2("Bob", 20);
        System.out.println(p2.name());
        System.out.println(p2.age());
    }



}
